#include <stdio.h>
#include <string.h>
#include "list.h"
typedef int BOOL;
union typ
{
    BOOL val1;
    int val2;
    float val3;
};
struct data
{
    int key;
    int type;
    union typ t;
    struct list_head list;
};



void main()
{
    struct list_head head;
    INIT_LIST_HEAD(&head);

    struct data d1;
     d1.key=1;
     d1.type = 2;
     d1.t.val2=10;

    struct data d2;
     d2.key=2;
     d2.type = 1;
     d2.t.val1=0;

    struct data d3;
     d3.key=3;
     d3.type = 3;
     d3.t.val3=22.5;


    list_add(&d1.list, &head);
    list_add(&d2.list, &head);
    list_add(&d3.list, &head);

    struct list_head *pos;
    struct data *tmp;

    printf("init list\n");
    list_for_each(pos, &head)  //这里万万不可加分号
    {
        tmp = list_entry(pos, struct data, list);
        if (tmp->type==1)
        {
            printf("val = %d,", tmp->t.val2);
        }
        if (tmp->type==2)
        {
           printf("val = %d,", tmp->t.val1);
        }
        if (tmp->type==3)
        {
            printf("val = %f,", tmp->t.val3);
        }
        printf("key = %d, type = %d\n", tmp->key, tmp->type);
    }
    printf("\n");

    pos = get_first(&head);
    tmp = list_entry(pos, struct data, list);
    printf("first is %d\n\n", tmp->key);

    pos = get_last(&head);
    tmp = list_entry(pos, struct data, list);
    printf("last is %d\n\n", tmp->key);

    puts("del last");
    list_del(pos);

    printf("after del:");
    list_for_each(pos, &head)
    {
        tmp = list_entry(pos, struct data, list);
        printf("%d ", tmp->key);
    }
    puts("\n");
}